package mapa
{
	import com.google.maps.InfoWindowOptions;
	import com.google.maps.LatLng;
	import com.google.maps.Map;
	import com.google.maps.MapEvent;
	import com.google.maps.MapMouseEvent;
	import com.google.maps.MapType;
	import com.google.maps.controls.MapTypeControl;
	import com.google.maps.controls.PositionControl;
	import com.google.maps.controls.ZoomControl;
	import com.google.maps.overlays.Marker;
	import com.google.maps.overlays.MarkerOptions;
	import com.google.maps.styles.FillStyle;
	import com.google.maps.styles.StrokeStyle;
	
	import flash.events.Event;
	import flash.geom.Point;
	import flash.net.*;
	
	import mx.collections.ArrayCollection;
	import mx.core.UIComponent;
	import mx.rpc.CallResponder;
	import mx.rpc.events.ResultEvent;
	
	import services.zapytania.*;
	import widok.inzynierka;

	public class Mapa extends UIComponent
	{
		
		
		public var gMap:Map;
		private static var miejsca:Vector.<Miejsce>;
		private static var zaznaczony:MarkerOptions=new MarkerOptions({
			strokeStyle: new StrokeStyle({color: 0x987654}),
			fillStyle: new FillStyle({color: 0x223344, alpha: 0.8}),
			radius: 12,
			hasShadow: true
		});
	
		private var options:InfoWindowOptions = new InfoWindowOptions({
			
			customContent:new InfoWindowMapComponent(2),
			width:330,
			height:330,
			drawDefaultFrame:true
		});
		
		
		private var options2:InfoWindowOptions = new InfoWindowOptions({
			 
			
			width:100,
			height:100,
			drawDefaultFrame:true
		});
		
		private static var zwykly:MarkerOptions=new MarkerOptions();
		
		[Bindable]
		public var _instance : inzynierka;
		private var dane:SamplePhp2;
		private var polozenie:ArrayCollection;
		

		
		public function Mapa():void
		{
			dane=new SamplePhp2();
			var responder:CallResponder=new CallResponder();
			responder.token = dane.getAllItems();
			responder.addEventListener(ResultEvent.RESULT,danedotablicy);	
			
			
			gMap = new Map();
			gMap.addControl(new ZoomControl());
			
			gMap.key = "ABQIAAAAUtt5sMMqRxM7u2CGqufNZxS3i0hGFisnx3dDHwh0blRrOuU7wBRp2oGcBxENA88zCNRTmtyjn1stfA";
		
			
			gMap.sensor="false";
		
			
			
			this.addChild(gMap);
			
			
		}
		
		
		
		private function danedotablicy (event:ResultEvent):void
		{
			polozenie = event.result as ArrayCollection;
			gMap.addEventListener(MapEvent.MAP_READY, mapReadyHandler);
		}
		
		
		private function constMiejsca():Vector.<Miejsce>
		{
		   
			
		
		var twspolrzedne:Vector.<Miejsce>=new Vector.<Miejsce>();
		
		var koniec:int=polozenie.length;
		var temp:Miejsce;
		
		
			
			
				 
			 
			 
			 for(var i:int=0;i< koniec;i++)
			 {
				 
				
				
				 
				 switch(polozenie[i].typ)
				 {
					 case 5: 
					 {
						 temp=new Miejsce(new LatLng( polozenie[i].dlugoscgeo,polozenie[i].szerokoscgeo ), polozenie[i].nazwa,i,new MarkerOptions({icon: new CustomIcon()}));
						 temp.options=options;
						 temp.addEventListener(MapMouseEvent.CLICK, function(e:MapMouseEvent):void {
							 
							 _instance.targetTreebyID(e.target.nr);
							 _instance.galeria.rotate(e.target.nr % 20);
							 e.target.options.customContent.a.loadTexture(e.target.nr);
							 e.target.MarkerClick(e);
							 
							 
							 
							 
						 } );
						 break;
					 }
					 default:
					 {
						 temp=new Miejsce(new LatLng( polozenie[i].dlugoscgeo,polozenie[i].szerokoscgeo ), polozenie[i].nazwa,i,zwykly);
						 temp.options=options2;
						 temp.addEventListener(MapMouseEvent.CLICK, function(e:MapMouseEvent):void {
							 
							 _instance.targetTreebyID(e.target.nr);
							 e.target.options.contentHTML="<a href='"+polozenie[e.target.nr].tekst+"'>LINK</a> <p>tekst</p>";
							 e.target.MarkerClick(e);
							 _instance.galeria.rotate(e.target.nr);
							 _instance.setXMLsource(e.target.nr);
							 
						 } );
						 break;
					 }
				 }
				
				 
			    
					 
				 
				 
				 temp.addEventListener(MapMouseEvent.ROLL_OVER, function(e:MapMouseEvent):void {
					 gMap.addOverlay(e.target.customOverlay);
					 
	
					 
					
					 
				 });
				 temp.addEventListener(MapMouseEvent.ROLL_OUT, function(e:MapMouseEvent):void {
					 gMap.removeOverlay(e.target.customOverlay);
					
				 });
				 
				 
				 twspolrzedne.push(temp);
				 gMap.addOverlay(temp);
		
				 
				 
				 
				 
			 }
		   
			 
				 
		
		
		
		
		
			
		
		return twspolrzedne;
		}
		
		

	

		
		
		
		private function mapReadyHandler(e:MapEvent):void
		{
			gMap.setCenter(new LatLng(53.116516,23.149352), 16, MapType.NORMAL_MAP_TYPE);
			gMap.setSize(new Point(this.width, this.height)); 
		
			miejsca=constMiejsca();
			
			
			
		
		}
		
		private var temp:Miejsce
		private var tempid:int;
		
		public function getMiejsceByName(id:int):void
		{
			try
			{
			gMap.addOverlay(miejsca[tempid]);
			gMap.removeOverlay(temp);
			}
			catch(err:Error){};
			
			for each (var index:Miejsce in miejsca ) {
				trace(index);
				if(index.nr ==id) 
				{
					gMap.setCenter(index.xy);
					gMap.removeOverlay(miejsca[id]);
					
					tempid=id;
					temp=new Miejsce(miejsca[id].xy,miejsca[id].opis,miejsca[id].nr,zaznaczony);
					
					gMap.addOverlay(temp);
					
					return;
				}
			}
			
			return;
		}
		
		
		
		public function resize():void
		{
			gMap.setCenter(new LatLng(53.116516,23.149352), 16, MapType.NORMAL_MAP_TYPE);
			gMap.setSize(new Point(this.parent.width, this.parent.height)); 
		}
		
		override protected function updateDisplayList(
			unscaledWidth:Number, unscaledHeight:Number):void
		{
			super.updateDisplayList(unscaledWidth, unscaledHeight);
			this.gMap.width=this.parent.width;
			this.gMap.height=this.parent.height;
			
			
			
			
		}
		
		
		
	}
}